/**
 * 用户状态管理 Store
 * 使用 Pinia 管理用户登录状态、用户信息等全局状态
 * 提供登录、注册、退出登录等方法
 */

import { defineStore } from 'pinia'
import { ref } from 'vue'
import { login as loginApi, register as registerApi } from '@/api/user'
import { ElMessage } from 'element-plus'
import router from '@/router'

/**
 * 创建用户 Store
 * 'user': Store 的唯一标识符
 */
export const useUserStore = defineStore('user', () => {
  // ============ 状态定义 ============
  
  /**
   * JWT Token
   * 从 localStorage 初始化，实现登录状态持久化
   */
  const token = ref(localStorage.getItem('token') || '')
  
  /**
   * 用户信息
   * 包含 userId, phone 等基本信息
   */
  const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || 'null'))

  // ============ 方法定义 ============
  
  /**
   * 用户登录
   * @param {Object} loginData - 登录数据 { phone, password }
   * @returns {Promise} 登录结果
   */
  const login = async (loginData) => {
    try {
      // 调用登录 API
      const res = await loginApi(loginData)
      
      // 保存 Token
      token.value = res.token
      localStorage.setItem('token', res.token)
      
      // 从 JWT Token 解析用户信息
      // JWT 格式：header.payload.signature
      // payload 部分包含用户信息（Base64 编码）
      try {
        // 解码 JWT 的 payload 部分
        const payload = JSON.parse(atob(res.token.split('.')[1]))
        const user = {
          userId: payload.userId || payload.sub || 1,  // 用户ID
          phone: loginData.phone  // 手机号
        }
        userInfo.value = user
        localStorage.setItem('userInfo', JSON.stringify(user))
      } catch (parseError) {
        // 如果 JWT 解析失败，使用默认用户信息
        console.warn('JWT解析失败，使用默认信息', parseError)
        const user = {
          userId: 1,
          phone: loginData.phone
        }
        userInfo.value = user
        localStorage.setItem('userInfo', JSON.stringify(user))
      }
      
      // 显示成功提示
      ElMessage.success('登录成功')
      
      // 跳转到首页
      router.push('/app/dashboard')
      
      return res
    } catch (error) {
      // 登录失败（API 会通过 request.js 拦截器显示具体错误）
      ElMessage.error('登录失败')
      throw error
    }
  }

  /**
   * 用户注册
   * @param {Object} registerData - 注册数据 { phone, password, childName, childAge }
   * @returns {Promise} 注册结果
   */
  const register = async (registerData) => {
    try {
      const res = await registerApi(registerData)
      ElMessage.success('注册成功，请登录')
      return res
    } catch (error) {
      ElMessage.error('注册失败')
      throw error
    }
  }

  /**
   * 退出登录
   * 清除本地存储的用户信息和 Token，跳转到首页
   */
  const logout = () => {
    // 清空状态
    token.value = ''
    userInfo.value = null
    
    // 清除本地存储
    localStorage.removeItem('token')
    localStorage.removeItem('userInfo')
    
    // 显示提示
    ElMessage.success('已退出登录')
    
    // 跳转到首页
    router.push('/')
  }

  // ============ 导出状态和方法 ============
  
  return {
    // 状态
    token,      // JWT Token
    userInfo,   // 用户信息
    
    // 方法
    login,      // 登录
    register,   // 注册
    logout      // 退出登录
  }
})
